package ru.chezclif.lern.conread;
import ru.chezclif.lern.conread.enumerations.EnumPseudoProtocols;
/**
 * Класс для обработки строки
 * "Псевдопротокол:Путь к файлу", 
 * пример -  "xml://c:\Test\Settings.xml"
 * @author Vit
 *
 */
public class PseudoProtocolParser {
private Enum<EnumPseudoProtocols> ProtocolType;
private String protocol="";
private String path="";
private int position=-1;
	/** Из входящего параметра создаются две строки, в одной псевдо протокол, в другой путь к файлу.
	 *  Устанавливается флаг на полученный тип файла настройки.
	 * @param pseudoProtocolString строка, содержащая псевдопротокол и путь до оперируемого файла */
	public void pseudoProtocolParsing(String pseudoProtocolString){
		Preconditions.notBlank(pseudoProtocolString);
			position=pseudoProtocolString.indexOf("://");
				if ((position==0)||(position==-1)){
				throw new ru.chezclif.lern.conread.exceptions.IncorrectStringException(pseudoProtocolString);
			}	
				protocol=pseudoProtocolString.substring(0, position);
					if (protocol.equals("xml")){
						ProtocolType=EnumPseudoProtocols.XML; //parse xml with arguments "path"
					}else if(protocol.equals("ini")){
						ProtocolType=EnumPseudoProtocols.INI;//parse ini with arguments "path"
					}else if(protocol.equals("props")){
						ProtocolType=EnumPseudoProtocols.PROPERTIES;	//parse props with arguments "path"
					}else if(protocol.equals("file")){
						ProtocolType=EnumPseudoProtocols.FILE; //parse file with arguments "path"
					}else {
						throw new ru.chezclif.lern.conread.exceptions.IncorrectStringException(pseudoProtocolString);
					}
				path=pseudoProtocolString.substring(position+3, pseudoProtocolString.length());
					if (path.equals("")){
						throw new ru.chezclif.lern.conread.exceptions.IncorrectStringException(pseudoProtocolString);
					}	
					System.out.println(protocol);
					System.out.println(path);
	}	
		/**Возвращает значение флага, указывающего на тип псевдопротокола
		 *@return возвращает флаг соответствующий псевдопротоколу */
		public Enum<EnumPseudoProtocols> getProtocolType() {
			if (ProtocolType==null){
				throw new ru.chezclif.lern.conread.exceptions.IncorrectStringException("Protocol is empty");
			}
			return ProtocolType;
		}
		/**Возвращает полный путь до файла с настройками 
		 *@return возвращает полный путь к оперируемому файлу  */
		public String getPath() {
			if (path==""){
				throw new ru.chezclif.lern.conread.exceptions.IncorrectStringException("Path is not exist");
			}
			return path;
		}
}
